package 设计模式.b_工厂方法;

/**
 * 工厂方法模式：Factory Method 定义一个用于创建对象的接口或抽象类，让子类决定实例化哪个类
 *          （在简单工厂中，创建对象的是单独的工厂类，在另一个类中，而在工厂方法中，是由子类来创建的）
 * 简单工厂模式只有一个工厂类
 *   优点是实现简单，缺点不符合开闭原则，添加新的产品类型时需要修改工厂类
 * 工厂方法模式，有多个工厂类，每个工厂类负责创建一种具体的产品对象
 *   优点是符合开闭原则，可以通过增加新的工厂类来扩展新的产品类型，缺点是增加了系统复杂度
 * 
 * @author caihe
 * @date 2023/3/6 13:57
 */
public class Test {

    public static void main(String[] args) {
        Factory copperFactory = new CopperFactory();
        Factory goldFactory = new GoldFactory();

        Coin coin = copperFactory.getCoin();
        System.out.println(coin.getDesc());

        Coin coin1 = goldFactory.getCoin();
        System.out.println(coin1.getDesc());

        System.out.println(copperFactory.fun());
        System.out.println(goldFactory.fun());
    }
    
}
